package types

import "gin/model"

type GetEntityRelationInfoReq struct {
	Id                 []int64 `json:"id" binding:"required" `
	Type               string  `json:"type" binding:"required"`
	Page               []int   `json:"page" binding:"required"`
	InitialEpisodeCode string  `json:"initial_episode_code"`
	ShowingsNumber     string  `json:"showings_number"`
}

type GetEntityRelationInfoRes struct {
	model.Entity
	Category   string `json:"category"`
	Grade      string `json:"grade"`
	ParentName string `json:"parent_name"`
}

type GetAssetRelationShotCountReq struct {
	GetAssetRelationShotCountParam `json:"param" binding:"required" `
}

type GetAssetRelationShotCountParam struct {
	EntityId  uint64 `json:"entity_id" binding:"required" `
	ProjectId uint64 `json:"project_id" binding:"required"`
	Page      []int  `json:"page" binding:"required"`
}

type GetAssetRelationShotCountRes struct {
	InitialEpisodeCode string `json:"initial_episode_code"` // 剧集id
	ProjectId          uint64 `json:"project_id"`           // 项目id
	Number             int64  `json:"number"`               // 统计值
}

type GetAssetRelationShotIdsReq struct {
	EntityId           uint64   `json:"entity_id"  binding:"required"`
	InitialEpisodeCode []string `json:"initial_episode_code"  binding:"required"` // 剧集id
	ProjectId          uint64   `json:"project_id"  binding:"required"`           // 项目id
}

type GetAssetRelationShotIdsRes struct {
	InitialEpisodeCode string `json:"initial_episode_code"` // 剧集id
	ProjectId          uint64 `json:"project_id"`           // 项目id
	Number             int64  `json:"number"`               // 统计值
}

type GetAssetRelationShotListParam struct {
	EntityId           uint64   `json:"entity_id"  binding:"required"`
	InitialEpisodeCode []string `json:"initial_episode_code"` // 剧集id
}

type GetAssetRelationShotListReq struct {
	Param GetAssetRelationShotListParam `json:"param"  binding:"required"`
}

type EntityWithStatus struct {
	model.Entity
	ShotStatus model.Status `json:"shot_status"`
}

type GetAssetRelationShotListSceneData struct {
	ShowingsNumberId string             `json:"id"`
	ShowingsNumber   string             `json:"name"`
	ShotEntity       []EntityWithStatus `json:"children"`
	ShotNumber       int64              `json:"shot_number"`
}

type GetAssetRelationShotListRes struct {
	InitialEpisodeCodeId string                              `json:"id"`
	InitialEpisodeCode   string                              `json:"name"`
	SceneData            []GetAssetRelationShotListSceneData `json:"children"`
	SceneDataMap         map[string]int                      `json:"-"`
	ShotNumber           int64                               `json:"shot_number"`
}

type GetAssetRelationShotTaskCardListParam struct {
	EntityId uint64 `json:"entity_id"  binding:"required"`
}

type GetAssetRelationShotTaskCardListReq struct {
	Param GetAssetRelationShotTaskCardListParam `json:"param"  binding:"required"`
}

type EntityTaskCardWithStatus struct {
	model.Entity
	ShotStatus    model.Status `json:"shot_status"`
	EpisodeStatus model.Status `json:"episode_status"`
}

type GetAssetRelationShotTaskCardListSceneData struct {
	ShowingsNumberId string                     `json:"id"`
	ShowingsNumber   string                     `json:"name"`
	ShotEntity       []EntityTaskCardWithStatus `json:"children"`
	ShotNumber       int64                      `json:"shot_number"`
}

type GetAssetRelationShotTaskCardListRes struct {
	InitialEpisodeCodeId uint64                                      `json:"id"`
	InitialEpisodeCode   string                                      `json:"name"`
	SceneData            []GetAssetRelationShotTaskCardListSceneData `json:"children"`
	SceneDataMap         map[string]int                              `json:"-"`
	ShotNumber           int64                                       `json:"shot_number"`
	EpisodeIsSeal        string                                      `json:"episode_is_seal"`      // 封板
	EpisodeIsShow        string                                      `json:"episode_is_show"`      // 播出
	PlanStartTime        string                                      `json:"plan_start_time"`      // 计划开始时间
	EpisodeStatus        model.Status                                `json:"episode_status"`       // 集状态
	EpisodePlanStartTime string                                      `json:"episodePlanStartTime"` // 集开始时间
	EpisodePlanEndTime   string                                      `json:"episodePlanEndTime"`   // 集结束时间
}

type GetMultipleEntityRelationIdsReq struct {
	EntityIds []int64 `json:"entity_ids"  binding:"required"` // 实体id
}

type GetMultipleEntityRelationIdsRes struct {
	LevelIds []int64 `json:"level_ids"`
	AssetIds []int64 `json:"asset_ids"`
	ShotIds  []int64 `json:"shot_ids"`
}

// GetMultipleEntityRelationCountReq 镜头统计请求参数
type GetMultipleEntityRelationCountReq struct {
	ProjectId              int64                    `json:"project_id"`                // 项目Id
	EpisodeCodes           []string                 `json:"episode_codes"`             // 集
	InitialEpisodeCodeList []InitialEpisodeCodeItem `json:"initial_episode_code_list"` // 集
	EpisodeType            string                   `json:"episode_type"`              // 剧集类型
	ModuleCode             string                   `json:"module_code"`               // 类型模块
	Type                   string                   `json:"type"`                      // 类型
	EntityIds              []int64                  `json:"entity_ids"`                // 实体ids
	CategoryName           []string                 `json:"category_name"`             // 分类名
	ModuleCodeList         []string                 `json:"module_code_list"`          // 资产清单统计列表
	ShotProductionMethod   string                   `json:"shot_production_method"`    // 制作方式
	ShotClothSolution      string                   `json:"shot_cloth_solution"`       // 解算方式
	ShotFx                 string                   `json:"shot_fx"`                   // 特效方式
	ShotPerformForm        string                   `json:"shot_perform_form"`         // 表演方式
	EntityName             string                   `json:"entity_name"`               // 实体名
	Status                 []string                 `json:"status"`                    // 状态
	AssetGrade             string                   `json:"asset_grade"`               // 资产等级
	IsRelate               string                   `json:"is_relate"`                 // 是否关联
	DirectorStar           string                   `json:"director_star"`             // 导演是否关注
	KeyShot                string                   `json:"key_shot"`                  // 是否关键镜头
	IsAppend               string                   `json:"is_append"`                 // 是否新增
	EntityCreated          []int64                  `json:"entity_created"`            // 创建时间筛选
}
type AssetGradeStruct struct {
	SS int64 `json:"S+"`
	S  int64 `json:"S"`
	A  int64 `json:"A"`
	B  int64 `json:"B"`
	C  int64 `json:"C"`
}
type GetMultipleEntityRelationCountResCategoryCount struct {
	Category       string           `json:"category"`
	EntityCount    int64            `json:"entity_count"`
	AssetGradeList AssetGradeStruct `json:"asset_grade_list"`
}

type GetMultipleEntityRelationCountRes struct {
	EntityCount   int64                                            `json:"entity_count"`
	CategoryCount []GetMultipleEntityRelationCountResCategoryCount `json:"category_count"`
}
